<template>
	<view>
		<view class="goods-list">
			<view v-for="(goods, i) in goodsList" :key="i" @click="gotoDetail(goods)">
				<myGoods :goods="goods"></myGoods>
			</view>
		</view>
	</view>
</template>

<script>
import { getGoodsList } from '@/api/index';
import myGoods from '../../components/my-goods/index.vue'
export default {
	name: 'WxShopsIndex',
	components: {
		myGoods
	},
	data() {
		return {
			// 请求对象参数
			queryObj: {
				// 查询关键字
				query: '',
				// 商品分类id
				cid: '',
				// 页码值
				pageNum: 1,
				// 每页显示多少条数据
				pagesize: 10,
			},
			// 商品列表数据
			goodsList: [],
			// 总条数
			total: 0,
			// 是否正在请求数据
			isLoading: false
		};
	},

	onLoad(option) {
		this.queryObj.query = option.query || '';
		this.queryObj.cid = option.cid || '';
		// 调用获取商品列表数据的方法
		this.getGoodsList();
	},
	// 上拉刷新的方法
	onReachBottom() {
		 // 判断是否还有下一页数据
		if (this.queryObj.pageNum * this.queryObj.pagesize >= this.total) {
			return uni.$showMsg('数据加载完毕！')
		}
		// 判断是否正在请求其它数据，如果是，则不发起额外的请求
		if (this.isLoading) {
			return
		}
		// 页码值自增+1
		this.queryObj.pageNum = +1
		// 重新获取商品列表数据
		this.getGoodsList();
		setTimeout(function () {
			uni.stopPullDownRefresh();
		}, 1500);
	},
	// 下拉刷新方法
	onPullDownRefresh() {
		// 1. 重置关键数据
		this.queryObj.pageNum = 1
		this.total = 0
		this.isLoading = false
		this.goodsList = []
		// 2. 重新发起请求
		this.getGoodsList(() => uni.stopPullDownRefresh())
	},
	methods: {
		// 获取商品列表数据的方法
		async getGoodsList(cb) {
			// ** 打开节流阀
			this.isLoading = true;
			const { data: res } = await getGoodsList(this.queryObj);
			// ** 关闭节流阀
			this.isLoading = false;
			// 只要数据请求完毕，就立即按需调用 cb 回调函数
      cb && cb()
			if (res.meta.status !== 200) {
				return uni.$showMsg();
			}
			this.goodsList = [...this.goodsList, ...res.message.goods];
			this.total = res.message.total;
		},
		// 点击跳转到详情页
		gotoDetail(item) {
			uni.navigateTo({
				url: `/pages/goods_detail/index?goods_id=${item.goods_id}`,
			});
		},
	},
};
</script>

<style lang="scss" scoped>

</style>
